package ar.com.larreta.grilla.client.ventanas;

import ar.com.larreta.grilla.client.Grilla;
import ar.com.larreta.intercambio.client.comunes.Direccion;
import ar.com.larreta.intercambio.client.comunes.ListaDeRegiones;
import ar.com.larreta.intercambio.client.comunes.ListaDeTiposDeDirecciones;
import ar.com.larreta.intercambio.client.comunes.TiposRegion;
import ar.com.larreta.vista.client.BarraHerramientas;
import ar.com.larreta.vista.client.CajaDeTexto;
import ar.com.larreta.vista.client.Estado;
import ar.com.larreta.vista.client.ListaDesplegable;
import ar.com.larreta.vista.client.Mensajes;
import ar.com.larreta.vista.client.Ventana;

import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;

public class VentanaDirecciones extends Ventana {
	
	public static final Integer TAMANIO_TEXTO_MENSAJE = 200;

	private ListaDesplegable tipoDireccion;
	private ListaDesplegable pais;
	private ListaDesplegable provincia;
	private ListaDesplegable localidad;
	private CajaDeTexto calle;
	private CajaDeTexto altura;
	private CajaDeTexto adicional;
	
	private Direccion direccion;
	
	private Grilla grilla;
	
	public VentanaDirecciones(Grilla grilla) {
		super(Mensajes.getInstancia().get("msg.direcciones"), "");
		
		this.grilla = grilla;
		
		barraHerramientas = new BarraHerramientas(this, getAnchoVentana(), 25);
		add(barraHerramientas);
		
		setHeight(230);
		
		setModal(Boolean.TRUE);
		
		tipoDireccion = new ListaDesplegable(Mensajes.getInstancia().get("msg.tipodireccion"), null, new ListaDeTiposDeDirecciones(), "listaTipoDirecciones");
		tipoDireccion.getCampoDesplegable().setWidth(TAMANIO_TEXTO_MENSAJE);
		registrarCampo(tipoDireccion.getCampoDesplegable());
		add(tipoDireccion.getHorizontal());
		
		pais = new ListaDesplegable(Mensajes.getInstancia().get("msg.pais"), null, new ListaDeRegiones(TiposRegion.PAIS), "listaRegiones");
		pais.getCampoDesplegable().setWidth(TAMANIO_TEXTO_MENSAJE);
		registrarCampo(pais.getCampoDesplegable());
		add(pais.getHorizontal());
		
		pais.getCampoDesplegable().addSelectionChangedListener(new SelectionChangedListener<ModelData>() {
			@Override
			public void selectionChanged(SelectionChangedEvent<ModelData> se) {
				((ListaDeRegiones)provincia.getProxy().getPedido()).setRegionPadre(pais.getCampoDesplegable().getValue());
			}
		});

		provincia = new ListaDesplegable(Mensajes.getInstancia().get("msg.provincia"), null, new ListaDeRegiones(TiposRegion.PROVINCIA), "listaRegiones");
		provincia.getCampoDesplegable().setWidth(TAMANIO_TEXTO_MENSAJE);
		registrarCampo(provincia.getCampoDesplegable());
		add(provincia.getHorizontal());
		
		provincia.getCampoDesplegable().addSelectionChangedListener(new SelectionChangedListener<ModelData>() {
			@Override
			public void selectionChanged(SelectionChangedEvent<ModelData> se) {
				((ListaDeRegiones)localidad.getProxy().getPedido()).setRegionPadre(provincia.getCampoDesplegable().getValue());
			}
		});		

		localidad = new ListaDesplegable(Mensajes.getInstancia().get("msg.localidad"), null, new ListaDeRegiones(TiposRegion.LOCALIDAD), "listaRegiones");
		localidad.getCampoDesplegable().setWidth(TAMANIO_TEXTO_MENSAJE);
		registrarCampo(localidad.getCampoDesplegable());
		add(localidad.getHorizontal());
		
		calle = new CajaDeTexto(Mensajes.getInstancia().get("msg.calle"), null);
		calle.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		calle.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(calle.getCampoTexto());
		add(calle.getHorizontal());

		altura = new CajaDeTexto(Mensajes.getInstancia().get("msg.altura"), null);
		altura.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		altura.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(altura.getCampoTexto());
		add(altura.getHorizontal());		
		
		adicional = new CajaDeTexto(Mensajes.getInstancia().get("msg.adicional"), null);
		adicional.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		adicional.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(adicional.getCampoTexto());
		add(adicional.getHorizontal());			
		
		
	}
	
	public void cancelando(){
		cambiarEstadoACreacion();
		this.hide();
	}

	public void confirmando(){
		if (esValido()) {
			if (estado.equals(Estado.CREACION)){
				direccion = new Direccion();
			}
			
			direccion.setTipoDireccion(tipoDireccion.getCampoDesplegable().getValue());
			direccion.setCalle((String) calle.getCampoTexto().getValue());
			if (altura.getCampoTexto().getValue()!=null){
				direccion.setAltura(new Integer((String)altura.getCampoTexto().getValue()));
			}
			direccion.setAdicional((String)adicional.getCampoTexto().getValue());
			
			ModelData region = null;
			if (localidad.getCampoDesplegable().getValue()!=null){
				region = localidad.getCampoDesplegable().getValue();
			} else {
				if (provincia.getCampoDesplegable().getValue()!=null){
					region = provincia.getCampoDesplegable().getValue();
				} else {
					if (pais.getCampoDesplegable().getValue()!=null){
						region = pais.getCampoDesplegable().getValue();
					} 
				}
			}
			
			direccion.setRegion(region);
			
			if (estado.equals(Estado.CREACION)){
				grilla.agregarDato(direccion);
			}

			grilla.load();
			this.hide();
		}
	}

	public ListaDesplegable getTipoDireccion() {
		return tipoDireccion;
	}

	public ListaDesplegable getPais() {
		return pais;
	}

	public ListaDesplegable getProvincia() {
		return provincia;
	}

	public ListaDesplegable getLocalidad() {
		return localidad;
	}

	public CajaDeTexto getCalle() {
		return calle;
	}

	public CajaDeTexto getAltura() {
		return altura;
	}

	public CajaDeTexto getAdicional() {
		return adicional;
	}

	public Direccion getDireccion() {
		return direccion;
	}

	public void setDireccion(Direccion direccion) {
		this.direccion = direccion;
	}

}
